<?php
/**
 * User: LRZ
 * Date: 2020/1/11
 * Time: 9:44
 */

/**
 *  1. 两数之和
 *
 *  标签：数组、哈希表
 *
 *  给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。
 *  你可以假设每种输入只会对应一个答案。但是，你不能重复利用这个数组中同样的元素。
 *
 *  示例:
 *      给定 nums = [2, 7, 11, 15], target = 9
 *      因为 nums[0] + nums[1] = 2 + 7 = 9
 *      所以返回 [0, 1]
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/two-sum
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$nums   = [2, 6, 9, 3, 1, 4];
$target = 5;
$res    = twoSum($nums, $target);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function twoSum($nums, $target)
{
    $temp = [];
    $res  = [];
    foreach ($nums as $k => $v) {
        $diff = $target - $v;
        if (array_key_exists($diff, $temp)) {
            $res = array_merge($res, [$temp[$diff], $k]);
        }
        $temp[$v] = $k;
    }
    return $res;
}